/*
 * @Description: 
 * @Author: @yangwenshan
 * @since: 2021-05-12 13:55:18
 * @LastAuthor: @yangwenshan
 * @lastTime: 2021-05-17 09:58:27
 */
import router from './router'
import store from './store'
import storage from 'store'
import NProgress from 'nprogress' // progress bar
import '@/components/NProgress/nprogress.less' // progress bar custom style
import notification from 'ant-design-vue/es/notification'
import {setDocumentTitle, domTitle} from '@/utils/domUtil'
import {ACCESS_TOKEN} from '@/store/mutation-types'
import {i18nRender} from '@/locales'

NProgress.configure({showSpinner: false}) // NProgress Configuration

const allowList = ['login'] // no redirect allowList
const loginRoutePath = '/user/login'
const defaultRoutePath = '/'
router.beforeEach((to, from, next) => {
    NProgress.start() // start progress bar
    to.meta && (typeof to.meta.title !== 'undefined' && setDocumentTitle(`${
        i18nRender(to.meta.title)
    } - ${domTitle}`))
    /* has token */
    if (storage.get(ACCESS_TOKEN)) {
        if (to.path === loginRoutePath) {
            next({path: defaultRoutePath})
            NProgress.done()
        } else {
            if (store.getters.addRouters[0]) {
                next()
            } else {
                store.dispatch('GenerateRoutes')
                const redirect = decodeURIComponent(from.query.redirect || to.path)
                if (to.path === redirect) {
                    next({
                        ...to,
                        replace: true
                    })
                } else { // 跳转到目的路由
                    next({path: '/'})
                }
            }

        }
    } else {
        if (allowList.includes(to.name)) { // 在免登录名单，直接进入
            next()
        } else {
            next({
                path: loginRoutePath,
                query: {
                    redirect: to.fullPath
                }
            })
            NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
        }
    }
})

router.afterEach(() => {
    NProgress.done() // finish progress bar
})
